Houdini数学 : 点と直線の距離
点と直線の距離を求めるようなVEXを紹介します。
https://gyazo.com/cc3da28bc54b2e42b9bef418701469fd
考え方
点から直線に対して垂線を降ろします。 垂線の長さを求めることで、点と直線の距離が求まります。
https://gyazo.com/983eea91792119da9bae560def49e8d6
■VEX
上記の計算式をVEXで実装すると以下のようになります。
code:calc(c)
// 直線に沿うベクトル
vector l0 = point(@OpInput2, "P", 0);
vector l = normalize(point(@OpInput2, "P", 1) - point(@OpInput2, "P", 0));
vector p = @P - l0; // 位置ベクトル
float k = dot(l, p) / dot(l, l); // 垂線の足までの長さ
vector h = p - k * l; // 垂線(点Pと垂線の足を結ぶ直線)
float distance = length(h); // 点と直線の距離
f@pscale = distance; // 点と直線の距離をpscaleアトリビュートとして保存
ネットワーク全体
https://gyazo.com/51d5728274c9c85317480cf6feeabb11
関連
点と直線の距離を利用して、円と線分の接触判定を実装することもできます。